// 给定一个未排序的整数数组nums,找出数字连续的最长序列（不要序列元素在原数组中连续）的长度，并且要用时间复杂度为O(n)的算法解决此问题

// 思路：用哈希表映射所有元素，循环判断，当前元素arr[i],如果arr[i] - 1在set中存在，则跳过，如果没有，说明这个元素是新的起点，更新统计结果
// 时间复杂度：O(n)，n是数组的长度
// 空间复杂度：O(n)

function longestConsecutive(arr) {
    let ans = 0
    let set = new Set(arr)
    for (let i = 0; i < arr.length; i++) {
        if (!set.has(arr[i] - 1)) {
            // 说明arr[i]在数组中是新的起点
            let cur = arr[i]
            let len = 1
            while (set.has(cur + 1)) {
                cur++
                len++
            }
            ans = Math.max(ans, len)
        }        
    }
    return ans
}

let nums = [100,4,200,1,3,2]
console.log(longestConsecutive(nums))
